// 1.1. 运算符-算数运算符
/**
 * 算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符，并提供了以下类型的运算符：
* 
* 算术运算符
* 关系运算符
* 逻辑运算符
* 位运算符
* 赋值运算符
* 杂项运算符
* 本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。
 *
 * ---------------------
 * 算术运算符
下表显示了 C++ 支持的算术运算符。

假设变量 A 的值为 10，变量 B 的值为 20，则：

运算符	描述	实例
+	把两个操作数相加	A + B 将得到 30
-	从第一个操作数中减去第二个操作数	A - B 将得到 -10
*	把两个操作数相乘	A * B 将得到 200
/	分子除以分母	B / A 将得到 2
%	取模运算符，整除后的余数	B % A 将得到 0
++	自增运算符，整数值增加 1	A++ 将得到 11
--	自减运算符，整数值减少 1	A-- 将得到 9
 * 
 * 
*/

#include <iostream>

int main(void)
{
  int a, b;
  a = 10.0;
  b = 20.0;
  std::cout << "a+b\t" << a + b << '\n'
            << "a-b\t" << a - b << '\n'
            << "a*b\t" << a * b << '\n'
            << "a/b\t" << float(a / b) << '\n' // 0 ??
            << "a%b\t" << a % b << std::endl;
  printf("----------分隔符-----------\n");
  // 自增 自减运算符
  int i;
  i = 1;
  i++;
  std::cout << "i++\t" << i << std::endl; // 2
  i = 1;
  i--;
  std::cout << "i--\t" << i << std::endl; // 0
  printf("----------分隔符-----------\n");

  // i++ i-- 运算符在后面 先输出后运算
  // ++i --i 运算符在前面 先运算后输出

  i = 1;
  std::cout << "i++\t" << i++ << std::endl; // 1
  std::cout << "i\t" << i << std::endl;     // 2

  i = 1;
  std::cout << "i--\t" << i-- << std::endl; // 1
  std::cout << "i\t" << i << std::endl;     // 0

  i = 1;
  std::cout << "++i\t" << ++i << std::endl; // 2
  std::cout << "i\t" << i << std::endl;     // 2

  i = 1;
  std::cout << "--i\t" << --i << std::endl; // 0
  std::cout << "i\t" << i << std::endl;     // 0

  i = 1;

  std::cout << "exs1\t" << (i++) + (--i) + (i--) + (++i) << std::endl;

  // 1 + 1 + 1 + 1 = 4

  i = 1;
  std::cout << "exs2\t" << (i++) + (--i) - (i--) + (++i) << std::endl;
  // 1 + 1 - 1 + 1

  printf("----------隐式类型转换分隔符-----------\n");

  double d1 = 4;
  double d2 = 3;
  double d3 = d1 / d2;
  std::cout << "4 / 3\t" << d3 << std::endl; // 1.33333
  int i1 = 4;
  int i2 = 3;

  float f1 = 4;
  float f2 = 3;
  std::cout << "(i)4 / (i)3\t" << i1 / i2 << std::endl;         // 1 舍去小数部分
  std::cout << "(d)4 / (i)3\t" << (double)i1 / i2 << std::endl; // 1.333
  std::cout << "(f)4 / (f)3\t" << f1 / f2 << std::endl;         // 1.333
  std::cout << "(f)4 / (i)3\t" << (float)i1 / i2 << std::endl; // 1.333

  printf("----------end-----------\n");
  return 0;
}